<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Contenidos extends ControladorKakoonAdmin
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index ($parametro = null)
    {
        listado();
        $this->load->helper ("listado/tabla_posicion_kakoon");

        $this->analizaArgumentos ($parametro);

        $parametros = $this->getParametrosListado();
        $vista      = new TablaPosicionKakoon($this->getObjetoDatos(), $parametros->getBotones(), $parametros->getCondiciones(), $parametros->getAnulados(), $parametros->getNoFiltrar());
        $vista      = $this->analizaVistaListado ($vista);
        $modelo     = array();

        $modelo["contenido"] = $vista->getXHTML();

        $this->vista ($modelo);
    }

    public function ver ($identificador)
    {
        $datos  = $this->getObjetoDatos($identificador);
        $xhtml  = ModeloTipoContenidoKakoon::getXHTML($datos);
        $modelo = array();

        echo $xhtml;
        exit();
    }

    public function subir ($identificador)
    {
        $datos = $this->getObjetoDatos($identificador);
        $datos->sube();
        $datos->consolida();
         
        redirect(site_url($this->getBaseUrl()));
        exit();
    }

    public function bajar ($identificador)
    {
        $datos = $this->getObjetoDatos($identificador);
        $datos->baja();
        $datos->consolida();
         
        redirect(site_url($this->getBaseUrl()));
        exit();
    }

    public function getBaseUrl()
    {
        return "/administracion/contenidos/";
    }

    public function getObjetoDatos($identificador = Datos::NO_PERSISTIDO)
    {
        $retorno = new ContenidoKakoon(getAccesoBD(), $identificador);
        $retorno->setPropiedad (SeccionKakoon::CLAVE_PRIMARIA, $this->session->userdata(SeccionKakoon::CLAVE_PRIMARIA));

        return $retorno;
    }

    public function getParametrosFormulario ($identificador = Datos::NO_PERSISTIDO)
    {
        $anulados   = array("posicion");
        $parametros = new ParametrosFormularioKakoon ($anulados);

        return $parametros;
    }

    public function getParametrosListado()
    {
        $condiciones = array("Seccion" => $this->session->userdata (SeccionKakoon::CLAVE_PRIMARIA));
        $anulados    = array("posicion");
        $noFiltrar   = array(SeccionKakoon::CLAVE_PRIMARIA, "posicion");
        $botones     = array();

        array_push ($botones, new AccionBotonera                  ("Subir",     site_url($this->getBaseUrl()."subir")."/"));
        array_push ($botones, new AccionBotonera                  ("Bajar",     site_url($this->getBaseUrl()."bajar")."/"));
        array_push ($botones, new AccionBotonera                  ("Editar",    site_url($this->getBaseUrl()."gestionar")."/"));
        array_push ($botones, new AccionBotoneraModalKakoon       ("Ver",       site_url($this->getBaseUrl()."ver")."/", 600, 400));
        array_push ($botones, new AccionBotoneraConfirmacion      ("Borrar",    site_url($this->getBaseUrl()."borrar")."/","Desea realmente borrar el contenido seleccionado??"));

        $parametros = new ParametrosListadoKakoon($botones, $condiciones, $anulados, $noFiltrar);

        return $parametros;
    }

    protected function analizaVistaFormulario(FormularioKakoon $vista)
    {
        $vista->setGrupoDefecto("Registro Contenido");
        $vista->anyadeFlagFakeSubmit();
        $vista->creaEventoJS("tipo", FactoriaEventosFormularioJS::ONCHANGE, " submit(); ");

        $datos   = $vista->getDatos();
        $tipo    = ModeloTipoContenidoKakoon::recuperaTipo ($vista->getValor ("tipo"));
        $valido  = ($tipo instanceof TipoContenidoKakoon);

        if ($valido)
        {
            $sectores = $tipo->getSectores();

            foreach ($sectores as $unSector)
            {
                $nombreSector = $unSector->getNombre();
                $nombreCampo  = strtolower(get_class($tipo)."_".$unSector->getNombreFormateado());
                $tipoCampo    = $unSector->getTipo();
                $elemento     = $datos->getElementoPorSector ($nombreSector);
                $valorCampo   = null;

                if ($elemento instanceof ElementoKakoon)
                {
                    $valorCampo = $elemento->recuperaValor();
                }

                if (FactoriaCamposFormulario::ARCHIVO == $tipoCampo)
                {
                    $valorCampo = new Archivo($valorCampo);
                }

                $vista->creaCampo($tipoCampo, $nombreCampo, $nombreSector, $valorCampo);
                $vista->creaValidacionJS($nombreCampo, FactoriaValidacionesJS::REQUERIDO);
                $vista->setGrupo ($nombreCampo, "Datos Contenido");
            }
        }
         
        return $vista;
    }

    protected function analizaDatosFormulario(FormularioKakoon $vista, Datos $datos)
    {
        if ($datos->getIdentificador() == Datos::NO_PERSISTIDO)
        {
            $datos->registraPosicion();
            $datos->consolida();
        }

        $tipo     = ModeloTipoContenidoKakoon::recuperaTipo($datos->getPropiedad("tipo"));
        $sectores = $tipo->getSectores();

        foreach ($sectores as $unSector)
        {
            $nombreSector = $unSector->getNombre();
            $nombreCampo  = strtolower(get_class($tipo)."_".$unSector->getNombreFormateado());
            $valorCampo   = $vista->getValor($nombreCampo);
            $elemento     = $datos->getElementoPorSector ($nombreSector);

            if ($valorCampo instanceof Archivo)
            {
                $valorCampo = $valorCampo->getRutaCompleta();
            }

            if (is_null($elemento))
            {
                $elemento = new ElementoKakoon(getAccesoBD());
                $elemento->setPropiedad(ContenidoKakoon::CLAVE_PRIMARIA, $datos->getIdentificador());
                $elemento->setPropiedad("sector",                        $nombreSector);
                $elemento->setPropiedad("naturaleza",                    $unSector->getNaturaleza());
            }

            $elemento->registraValor($valorCampo);
            $elemento->consolida();
        }

        return $datos;
    }

    protected function analizaArgumentos ($seccion = null)
    {
        if ($seccion > 0)
        {
            $this->session->set_userdata (SeccionKakoon::CLAVE_PRIMARIA, $seccion);
        }

    }
}
/* End of file administracion/contenidos.php */
/* Location: ./application/controllers/administracion/contenidos.php */